/**
 *
 * @authors Your Name (you@example.org)
 * @date    2016-10-12 09:26:19
 * @version $Id$
 */
var calUtil = {
    //当前日历显示的年份
    showYear: 2016,
    //当前日历显示的月份
    showMonth: 1,
    //当前日历显示的天数
    showDays: 1,
    eventName: "load",
    //初始化日历
    init: function (signList) {
        calUtil.setMonthAndDay();
        calUtil.draw(signList);
        calUtil.bindEnvent();
    },
    draw: function (signList) {
        //绑定日历
        var str = calUtil.drawCal(calUtil.showYear, calUtil.showMonth, signList);
        $("#calendar").html(str);
        //绑定日历表头
        var calendarName = calUtil.showYear + "年" + calUtil.showMonth + "月";
        $(".calendar_month_span").html(calendarName);
    },
    //绑定事件
    bindEnvent: function () {
        //绑定上个月事件
        $(".calendar_month_prev").click(function () {
            //ajax获取日历json数据
            var signList = [{"signDay": "10"}, {"signDay": "11"}, {"signDay": "12"}, {"signDay": "13"}];
            calUtil.eventName = "prev";
            calUtil.init(signList);
        });
        //绑定下个月事件
        $(".calendar_month_next").click(function () {
            //ajax获取日历json数据
            //$.get("/sign.php?do=getDay",{},function(data){
            //$("#days").html(data);
            var signList = [{"signDay": "10"}, {"signDay": "11"}, {"signDay": "12"}, {"signDay": "19"}];
            calUtil.eventName = "next";
            calUtil.init(signList);
            // })
        });
    },
    //获取当前选择的年月
    setMonthAndDay: function () {
        switch (calUtil.eventName) {
            case "load":
                var current = new Date();
                calUtil.showYear = current.getFullYear();
                calUtil.showMonth = current.getMonth() + 1;
                break;
            case "prev":
                var nowMonth = $(".calendar_month_span").html().split("年")[1].split("月")[0];
                calUtil.showMonth = parseInt(nowMonth) - 1;
                if (calUtil.showMonth == 0) {
                    calUtil.showMonth = 12;
                    calUtil.showYear -= 1;
                }
                break;
            case "next":
                var nowMonth = $(".calendar_month_span").html().split("年")[1].split("月")[0];
                calUtil.showMonth = parseInt(nowMonth) + 1;
                if (calUtil.showMonth == 13) {
                    calUtil.showMonth = 1;
                    calUtil.showYear += 1;
                }
                break;
        }
    },
    getDaysInmonth: function (iMonth, iYear) {
        var dPrevDate = new Date(iYear, iMonth, 0);
        return dPrevDate.getDate();
    },
    bulidCal: function (iYear, iMonth) {
        var aMonth = new Array();
        aMonth[0] = new Array(7);
        aMonth[1] = new Array(7);
        aMonth[2] = new Array(7);
        aMonth[3] = new Array(7);
        aMonth[4] = new Array(7);
        aMonth[5] = new Array(7);
        aMonth[6] = new Array(7);
        var dCalDate = new Date(iYear, iMonth - 1, 1);
        var iDayOfFirst = dCalDate.getDay();
        var iDaysInMonth = calUtil.getDaysInmonth(iMonth, iYear);
        var prevMonthDaysCount = calUtil.getDaysInmonth(iMonth - 1, iYear);
        var iVarDate = 1;
        var d, d1, d2, w, p, n = 1;
        aMonth[0][0] = "日";
        aMonth[0][1] = "一";
        aMonth[0][2] = "二";
        aMonth[0][3] = "三";
        aMonth[0][4] = "四";
        aMonth[0][5] = "五";
        aMonth[0][6] = "六";
        if (iDayOfFirst) {
            for (d1 = iDayOfFirst, d2 = 0; d1 > 0; d1--, d2++) {
                aMonth[1][d1 - 1] = "-" + (prevMonthDaysCount - d2);
            }
        }
        for (d = iDayOfFirst; d < 7; d++) {
            aMonth[1][d] = iVarDate;
            iVarDate++;
        }
        for (w = 2; w < 7; w++) {
            for (d = 0; d < 7; d++) {
                if (iVarDate <= iDaysInMonth) {
                    aMonth[w][d] = iVarDate;
                    iVarDate++;
                } else {
                    aMonth[w][d] = "+" + n;
                    n++;
                }
            }
        }
        return aMonth;
    },
    ifHasSigned: function (signList, day) {
        var signed = false;
        $.each(signList, function (index, item) {
            if (item.signDay == day) {
                signed = true;
                return false;
            }
        });
        return signed;
    },
    drawCal: function (iYear, iMonth, signList) {
        var myMonth = calUtil.bulidCal(iYear, iMonth);
        var htmls = new Array();
        htmls.push("<div class='sign_main' id='sign_layer'>");
        htmls.push("<div class='sign_succ_calendar_title'>");
        htmls.push("<div class='calendar_month_next'>下月</div>");
        htmls.push("<div class='calendar_month_prev'>上月</div>");
        htmls.push("<div class='calendar_month_span'></div>");
        htmls.push("</div>");
        htmls.push("<div class='sign' id='sign_cal'>");
        htmls.push("<table>");
        var d, w, a, b;
        for (w = 1; w < 7; w++) {
            htmls.push("<tr>");
            for (d = 0; d < 7; d++) {
                a = myMonth[w][d];
                b = 'normal';
                var ifHasSigned = calUtil.ifHasSigned(signList, a);
                if (ifHasSigned) b = 'on';
                if (/\+/img.test(a)) a=parseInt(a), b = 'next';
                if (/\-/img.test(a)) a=parseInt(a)*-1, b = 'prev';
                htmls.push("<td class=\'" + b + "\'>" + a + "</td>");
            }
            htmls.push("</tr>");
        }
        htmls.push("</table>");
        htmls.push("</div>");
        htmls.push("</div>");
        return htmls.join('');
    }
};
